package com.hui.qiniucloud.service;

import com.hui.qiniucloud.entity.AICharacter;
import com.hui.qiniucloud.entity.Result;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * AI角色管理服务接口
 * 
 * @author huihui
 * @since 2025-09-28
 */
public interface ICharacterService extends IService<AICharacter> {

    /**
     * 上传图片
     * @param mpFile 图片文件
     * @return 上传结果
     */
    Result uploadImage(MultipartFile mpFile);

    /**
     * 获取所有活跃角色
     * @return 角色列表
     */
    List<AICharacter> getAllCharacters();

    /**
     * 根据ID获取角色
     * @param characterId 角色ID
     * @return 角色信息
     */
    AICharacter getCharacterById(String characterId);

    /**
     * 添加角色
     * @param character 角色信息
     */
    void addCharacter(AICharacter character);

    /**
     * 更新角色
     * @param character 角色信息
     */
    void updateCharacter(AICharacter character);

    /**
     * 删除角色
     * @param characterId 角色ID
     */
    void deleteCharacter(String characterId);

    /**
     * 搜索角色
     * @param keyword 关键词
     * @return 角色列表
     */
    List<AICharacter> searchCharacters(String keyword);

    /**
     * 根据用户ID获取角色列表
     * @param userId 用户ID
     * @return 角色列表
     */
    List<AICharacter> getUserCharacters(Long userId);

    /**
     * 获取系统预设角色
     * @return 系统角色列表
     */
    List<AICharacter> getSystemCharacters();

    /**
     * 根据用户ID搜索角色
     * @param userId 用户ID
     * @param keyword 关键词
     * @return 角色列表
     */
    List<AICharacter> searchUserCharacters(Long userId, String keyword);

    /**
     * 创建用户角色
     * @param character 角色信息
     * @param userId 用户ID
     * @return 创建结果
     */
    Result<AICharacter> createUserCharacter(AICharacter character, Long userId);

    /**
     * 更新用户角色（只能更新自己的角色）
     * @param character 角色信息
     * @param userId 用户ID
     * @return 更新结果
     */
    Result<AICharacter> updateUserCharacter(AICharacter character, Long userId);

    /**
     * 删除用户角色（只能删除自己的角色）
     * @param characterId 角色ID
     * @param userId 用户ID
     * @return 删除结果
     */
    Result<String> deleteUserCharacter(String characterId, Long userId);

    /**
     * 创建角色（管理员）
     * @param aiCharacter 角色信息
     * @return 创建结果
     */
    Result<AICharacter> create(AICharacter aiCharacter);

    /**
     * 更新角色（管理员）
     * @param aiCharacter 角色信息
     * @return 更新结果
     */
    Result<AICharacter> update(AICharacter aiCharacter);

    /**
     * 删除角色（管理员）
     * @param characterId 角色ID
     * @return 删除结果
     */
    Result<String> delete(String characterId);
}
